package demo1;

/**
 * 进程控制块（PCB），表示操作系统中的一个进程。
 * 存储进程的详细信息，如进程ID、内存基址、长度和状态。
 */
public class PCB {
    // 进程标识符
    private String id;
    // 进程在内存中的基址
    private int baseAddr;
    // 进程所需的内存长度
    private int length;
    // 进程是否占用内存：true表示进程活跃，false表示进程已释放
    private boolean isOccupied;
    // 指向内存中下一个PCB的指针，用于内存链表
    private PCB next;

    /**
     * 默认构造函数，将字段初始化为默认值。
     */
    public PCB() {
        this.id = null;
        this.baseAddr = 0;
        this.length = 0;
        this.isOccupied = false;
        this.next = null;
    }

    /**
     * 构造函数，用于创建具有ID和长度的PCB。
     * @param id 进程标识符
     * @param length 进程所需的内存长度
     */
    public PCB(String id, int length) {
        this.id = id;
        this.length = length;
        this.isOccupied = true; // 新创建的进程默认活跃
        this.baseAddr = 0;
        this.next = null;
    }

    /**
     * 构造函数，用于创建具有完整信息的PCB。
     * @param id 进程标识符
     * @param baseAddr 内存基址
     * @param length 内存长度
     * @param isOccupied 内存占用状态
     */
    public PCB(String id, int baseAddr, int length, boolean isOccupied) {
        this.id = id;
        this.baseAddr = baseAddr;
        this.length = length;
        this.isOccupied = isOccupied;
        this.next = null;
    }

    // Getter和Setter方法
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getBaseAddr() {
        return baseAddr;
    }

    public void setBaseAddr(int baseAddr) {
        this.baseAddr = baseAddr;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public boolean isOccupied() {
        return isOccupied;
    }

    public void setOccupied(boolean occupied) {
        isOccupied = occupied;
    }

    public PCB getNext() {
        return next;
    }

    public void setNext(PCB next) {
        this.next = next;
    }
}